package prjtgl.metier.comptes.interactions_utilisateur;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import prjtgl.bdd.HGeneral;
import prjtgl.bdd.comptes.interactions_utilisateur.HContact;
import prjtgl.bdd.comptes.interactions_utilisateur.HDemandeContact;
import prjtgl.metier.comptes.Membre;

/**
 * Demande de contact
 *
 * @author Lucie
 */
@Entity
@Table(name = "demande_contact")
public class DemandeContact implements Serializable {

	/**
	 * Id de la ligne en BDD
	 */
	private long id;
	/**
	 * Date de la demande de contact
	 */
	private Date date;
	/**
	 * Demandeur de la demande de contact
	 */
	private Membre demandeur;
	/**
	 * Membre demandé en contact
	 */
	private Membre demande;

	/**
	 * Retourne l'ID BDD de la demande
	 *
	 * @return ID BDD
	 */
	@Id
	@Column(name = "id")
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	public long getId() {
		return id;
	}

	/**
	 * Mutateur de l'ID BDD de la demande
	 *
	 * @param id Nouvel ID BDD
	 */
	public void setId(long id) {
		this.id = id;
	}

	/**
	 * Retourne la date de la demande
	 *
	 * @return Date de la demande
	 */
	@Column(name = "date_demande")
	@Temporal(javax.persistence.TemporalType.TIMESTAMP)
	public Date getDate() {
		return date;
	}

	/**
	 * Mutateur de la date de la demande
	 *
	 * @param dateDemande Nouvelle date de la demande
	 */
	public void setDate(Date dateDemande) {
		this.date = dateDemande;
	}

	/**
	 * Retourne le demandeur
	 *
	 * @return Membre demandeur
	 */
	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinColumn(name = "id_demandeur")
	public Membre getDemandeur() {
		return demandeur;
	}

	/**
	 * Mutateur du membre demandeur
	 *
	 * @param demandeur Nouveau membre demandeur
	 */
	public void setDemandeur(Membre demandeur) {
		this.demandeur = demandeur;
	}

	/**
	 * Retourne le membre demande
	 *
	 * @return Membre demande
	 */
	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "id_demande")
	public Membre getDemande() {
		return demande;
	}

	/**
	 * Mutateur du membre demande
	 *
	 * @param demande Nouveau membre demande
	 */
	public void setDemande(Membre demande) {
		this.demande = demande;
	}

	public void creer() {
		HDemandeContact hd = new HDemandeContact();
		hd.enregistrer(this);
	}
	
	public void accepter(){
		HContact hc = new HContact();
		Contact c = new Contact();
		c.setDemande(demande.getId());
		c.setDemandeur(demandeur.getId());
		hc.enregistrer(c);
		HDemandeContact hd = new HDemandeContact();
		hd.supprimerDemande(this);
	}
	
}
